def fun(a,b,c):   #a,b,c在函数定义处，所以是形式参数
    print('a=',a)
    print('b=',b)
    print('c=',c)

#函数的调用
fun(10,20,30) # 函数调用的时候的参数传递，为位置实参
lst=[11,22,33]
fun(*lst)   #在函数调用的时候，将列表中的每个元素都转换为位置实参传入

fun(a=100,b=300,c=200)  #函数的调用，为关键字实参
dic={'a':100,'b':200,'c':300}
fun(**dic) #在函数调用时，将字典中的键值对转换为关键字实参传入



def fun(a,b=10):    #位置可变的位置形参
    print('a=',a)
    print('b=',b)

def fun2(*args):    #个数可变的位置形参
    print(args)
def fun3(**args2):  #个数可变的关键字形参
    print(args2)

fun2(10,20,30,40,50)    #结果为元组
fun3(a=10,b=20,c=30,d=40,e=50)    #结果为字典


#关键字形参
def fun5(a,b,c,d):
    print('a=',a)
    print('b='.b)
    print('c=',c)
    print('d=',d)
#调用fun5函数
fun5(10,20,40,30)  #位置实参传递
fun5(a=10,b=20,c=30,d=40)      #关键字形参传递
fun5(10,20,c=30,d=40)    #前两个参数，采用的是位置实参传递，后两个参数采用的是关键字实参传递
'''需求，cd只能采用关键字实参传递
可以使用*,比方说，def fub(a,b,*,c,d)  以*后面的参数，在进行函数调用的时候，只能采用关键字参数传递
'''
'''函数定义时的形参的顺序问题'''
def fun7(a,b,*,c,d,**args):
    pass
def fun8(*args,**args2):
    pass
def fun9(a,b=10,*args,**args2):
    pass
#这几种组合方式都是可行的









